package com.briup.framework.utils.execption;

import com.briup.framework.utils.web.ResponseCode;
import org.springframework.lang.Nullable;
import org.springframework.util.StringUtils;

import java.util.Optional;

import static com.briup.framework.utils.web.ResponseCode.NAME_EXISTED;

/**
 * 参数校验工具类
 *
 * @Author briup
 */
public class BriupAssert {
    /**
     * 判断字符串不为null和空字符串和空格组成的字符串，不满足条件，抛出默认提示信息
     * @param str 比较字符串
     */
    public static void notEmpty(@Nullable String str) {
        if (StringUtils.isEmpty(str)) {
            throw new BriupFrameworkException("参数不为空或空字符串");
        }
    }

    /**
     * 判断字符串不为null和空字符串和空格组成的字符串
     * @param str 比较字符串
     * @param message 自定义抛出异常提示信息
     */
    public static void notEmpty(@Nullable String str, String message) {
        if (!StringUtils.hasText(str)) {
            throw new DataValidateFailedException(message);
        }
    }
    /**
     * 判断字符串不为null和空字符串和空格组成的字符串
     * @param str 比较字符串
     * @param code 自定义抛出异常提示信息
     */
    public static void notEmpty(@Nullable String str, ResponseCode code) {
        if (!StringUtils.hasText(str)) {
            throw new DataValidateFailedException(code.getStatus());
        }
    }
    /**
     * 判断对象是否为空,如果不为空，抛出异常
     * @param obj  判断对象
     * @param message 自定义抛出异常提示信息
     * @param <T> 对象类型
     * java.util.Objects.requireNonNull
     */
    public static <T> void requireNonNull(T obj, String message) {
        Optional.ofNullable(obj).orElseThrow(()-> new BriupFrameworkException(message));
    }
    public static <T> void requireNonNull(T obj, ResponseCode code) {
        Optional.ofNullable(obj).orElseThrow(()-> new BriupFrameworkException(code));
    }

    public static <T> void requireNull(T obj, String message) {
        if(obj != null){
            throw new BriupFrameworkException(message);
        }
    }
    public static <T> void requireNull(T obj,ResponseCode code) {
        if(obj != null){
            throw new BriupFrameworkException(code);
        }
    }

    /**
     * 如果条件不成立，抛出异常
     * @param expression
     * @param message
     */
    public static void check(boolean expression, String message) {
        if(!expression){
            throw new BriupFrameworkException(message);
        }
    }
    public static void check(boolean expression, ResponseCode code) {
        if(!expression){
            throw new BriupFrameworkException(code);
        }
    }
    public static void main(String[] args) {
        Object obj = null;
        Optional.ofNullable(obj).orElseThrow(()-> new BriupFrameworkException(NAME_EXISTED));
    }

}
